home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir24 / bpq408.zip / EXTERNAL.DOC < prev    next >
Text File  |  1992-03-22  |  5KB  |  302 lines

  1. The switch now contains code to support external Hardware Drivers.
  2. The following is an outline spec of the interface. This feature is still
  3. under development - any comments from potential users would be appreciated.
  4.  
  5. The driver is called by a software interrupt, and must be loaded before
  6. the switch. Each driver can support multiple channels, and more than one
  7. driver may be loaded, so long as each has its own software interrupt number.
  8.  
  9. At the moment the driver supplies only the Level 1 funtions, ie it effectively
  10. provides a KISS-like interface. Later I hope to support external Level 2
  11. drivers as well.
  12.  
  13. The transmit buffer will have a 5 byte header, with the length in 4th and
  14. 5th bytes. The length includes the header. The received frame passed to 
  15. the switch should have the same format.
  16.  
  17.  
  18. ;    THE ROUTINE IS CALLED VIA A SIMULATED INT, SO SHOULD RETURN
  19. ;    WITH AN IRET. THE DRIVER MAY SUPPORT MULTIPLE LOGICAL CHANNELS -
  20. ;    THE CHANNEL NUMBER IS PASSED IN AL
  21. ;
  22. ;    THE ROUTINE MUST PRESERVE ALL SEGMENT REGISTERS, UNLESS USED TO
  23. ;    RETURN A VALUE (IE DS IN FUNCTION 1). OTHER REGISTERS NEED NOT BE
  24. ;    SAVED
  25. ;
  26. ;    THE ROUTINE MUST PROVIDE THE FOLLOWING FUNCTIONS:
  27. ;
  28. ;
  29. ;    AH=0    INITIALISE. CALLED ONCE ON LOAD 
  30. ;
  31. ;    AH=1    RETURNS POINTER TO RECEIVED FRAME IN DS:SI, LENGTH IN CX
  32. ;        RETURNS CX=0 IF NO FRAME READY
  33. ;
  34. ;    AH=2    SEND FRAME IN BUFFER IN DS:DI - LENGTH IS IN WORD AT 3[DI]
  35. ;                        DATA FOLLOWS LENGTH
  36. ;
  37. ;    AH=3    STATUS. RETURNS AX=0 IF TX NOT BUSY. CX=0 IF RX NOT READY
  38. ;
  39.  
  40. The driver does not need to queue transmitted frames, but performance is
  41. likely to be improved if it can buffer a reasonable number of frames. The
  42. receive process must always be capable of buffering frames.
  43.  
  44.  
  45. John Wiseman, G8BPQ
  46.  
  47. 9/2/92
  48.  
  49.  
  50. The following sample code is equivalent to the INTERNAL Loopback 
  51. driver - ie anything sent to it is received.
  52.  
  53.      PAGE    62,132
  54. ;
  55.  
  56. CODE   SEGMENT PUBLIC 'CODE'
  57.  
  58.  
  59.     ASSUME  CS:CODE,DS:CODE,ES:CODE
  60. ;
  61. ;    INTERFACE TO SWITCH IS VIA SOFTWARE INTERRUPT
  62. ;
  63. ;    COMMANDS SUPPORTED ARE:
  64. ;
  65. ;    SUBCHANNEL IS IN AL
  66. ;
  67. ;    AH = 0    INIT Driver
  68. ;
  69. ;    AH = 1  Poll for data. Returns CX = 0 if none available,
  70. ;        otherwise CX=length, DS:SI=Data
  71. ;
  72. ;     AH = 2    Send frame. DS:DI = Buffer header.
  73. ;
  74. ;    AH = 3  Status - Return AX=0 If OK to send a frame.
  75. ;                    CX=0 If no frame available to receive
  76. ;
  77.     ORG    100H
  78.  
  79. GO:
  80.     JMP    INIT
  81.  
  82. SWITCHINT:
  83.  
  84.     CMP    AH,3
  85.     JE    STATUS
  86.  
  87.     CMP    AH,2
  88.     JE    PUTFRAME
  89.  
  90.     CMP    AH,1
  91.     JE    POLL
  92.  
  93.     IRET
  94.  
  95. STATUS:
  96.  
  97.     MOV    AX,0
  98.     CMP    CS:FRAMEFLAG,0        ; TX BUSY?
  99.     JZ    STAT00            ; NO
  100.  
  101.     MOV    AX,1
  102.  
  103. STAT00:
  104.  
  105.     CMP    CS:FRAMEFLAG,0        ; RX READY?
  106.     JE    POLLRET            ; NO
  107.  
  108.     MOV    CX,1
  109.  
  110.     IRET
  111.  
  112. POLL:
  113.  
  114.     CMP    CS:FRAMEFLAG,0
  115.     JE    POLLRET
  116.  
  117.     PUSH    CS
  118.     POP    DS
  119.  
  120.     MOV    SI,OFFSET FRAMECOPY
  121.     MOV    CX,3[SI]
  122.     MOV    FRAMEFLAG,0
  123.  
  124.     IRET
  125.  
  126. POLLRET:
  127.  
  128.     MOV    CX,0
  129.     IRET
  130.  
  131.  
  132.  
  133. PUTFRAME:
  134.  
  135.     PUSH    SI
  136.     PUSH    DI
  137.     PUSH    CX
  138.     PUSH    ES            ; save regs
  139.  
  140.     MOV    CX,3[DI]
  141.  
  142.     MOV    SI,DI
  143.     MOV    DI,OFFSET FRAMECOPY
  144.  
  145.     MOV    CS:FRAMEFLAG,1
  146.  
  147.     PUSH    CS
  148.     POP    ES            ; ES TO OUR SEGMENT
  149.  
  150.     REP MOVSB            ; SAVE FRAME
  151.     
  152.     POP    ES
  153.     POP    CX
  154.     POP    DI
  155.     POP    SI
  156.  
  157.     IRET
  158.  
  159.  
  160. FRAMECOPY    DB    400 DUP (0)
  161.  
  162. FRAMEFLAG    db    0
  163.  
  164.  
  165. ENDOFCODE    LABEL    BYTE
  166.  
  167. MSG    DB    'Sample EXTERNAL Interface for G8BPQ switch '
  168.     db    0dh,0ah,'$'
  169.  
  170. ERRORMSG    DB    0AH,'Parameter error:',0dh,0ah,0ah
  171.         db    'Format is DRIVER interrupt'
  172.         db    0dh,0ah,'Program NOT installed'
  173.         DB    0dh,0ah,0AH,'$'
  174.  
  175.  
  176. INIT:
  177.  
  178.     MOV    DX,OFFSET MSG
  179.     MOV    AH,9
  180.     INT    21H
  181. ;
  182.      MOV    SI,82H            ; PARAM STRING
  183.  
  184.     CALL    GETVALUE        ; interrupt number
  185.     JC    BADPORTVAL
  186.  
  187.     MOV    AL,BYTE PTR NEWVALUE
  188.     OR    AL,AL
  189.     JZ    BADPORTVAL
  190. ;
  191.     MOV    AL,BYTE PTR NEWVALUE    ; VECTOR
  192.     MOV    DX,OFFSET SWITCHINT
  193.     MOV    AH,25H
  194.     INT    21H            ; SET VECTOR
  195. ;
  196.     MOV    DX,OFFSET ENDOFCODE
  197.     INT    27H
  198.  
  199.  
  200. BADPORTVAL:
  201.  
  202.     MOV    AH,9
  203.     MOV    DX,OFFSET ERRORMSG
  204.     INT    21H
  205.  
  206.     RET
  207.  
  208. NEWVALUE    DW    0
  209. D16        DW    16
  210. D10        DW    10
  211.  
  212. GETVALUE:
  213. ;
  214. ;    EXTRACT NUMBER (HEX OR DECIMAL) FROM INPUT STRING
  215. ;
  216.     MOV    NEWVALUE,0
  217.  
  218.     LODSB
  219.     CMP    AL,'$'            ; HEX?
  220.     JE    DECODEHEX
  221.     DEC    SI
  222. VALLOOP:
  223.     LODSB
  224.     CMP    AL,' '
  225.     JE    ENDVALUE
  226.     CMP    AL,0DH
  227.     JE    ENDVALUE
  228.     CMP    AL,','
  229.     JE    ENDVALUE
  230. ;
  231. ;    ANOTHER DIGIT - MULTIPLY BY 10
  232. ;
  233.     MOV    AX,NEWVALUE
  234.     MUL    D10
  235.     MOV    NEWVALUE,AX
  236.  
  237.     MOV    AL,-1[SI]
  238.     SUB    al,'0'
  239.     JC    DUFFVALUE
  240.     CMP    AL,10
  241.     JNC    DUFFVALUE
  242.  
  243.     MOV    AH,0
  244.     ADD    NEWVALUE,AX
  245.  
  246.     JC    DUFFVALUE
  247.     JMP    VALLOOP
  248.  
  249. DECODEHEX:
  250. HEXLOOP:
  251.     LODSB
  252.     CMP    AL,' '
  253.     JE    ENDVALUE
  254.     CMP    AL,0DH
  255.     JE    ENDVALUE
  256.     CMP    AL,','
  257.     JE    ENDVALUE
  258. ;
  259. ;    ANOTHER DIGIT - MULTIPLY BY 16
  260. ;
  261.     MOV    AX,NEWVALUE
  262.     MUL    D16
  263.     MOV    NEWVALUE,AX
  264.  
  265.     MOV    AL,-1[SI]
  266.     SUB    al,'0'
  267.     JC    DUFFVALUE
  268.     CMP    AL,10
  269.     JC    HEXOK
  270.     SUB    AL,7
  271.     CMP    AL,10
  272.     JC    DUFFVALUE
  273.  
  274.     CMP    AL,16
  275.     JNC    DUFFVALUE
  276. HEXOK:
  277.     MOV    AH,0
  278.     ADD    NEWVALUE,AX
  279.     JMP    HEXLOOP
  280.  
  281. ENDVALUE:
  282.     CLC
  283.     RET
  284.  
  285. DUFFVALUE:
  286.     STC
  287.     RET
  288.  
  289.  
  290. CODE    ENDS
  291. ;               
  292.         END     GO
  293.  
  294.  
  295.  
  296.  
  297.  
  298. John Wiseman, G8BPQ
  299.  
  300. 21/3/92
  301.  
  302.